#!/bin/bash

#Script DetectaV5 del TP-Grupo 9 Sistemas Operativos - FIUBA
#
#Autor: Federico Piechotka 92126


function rechazarArchivo
{
	MoverV5.sh -c "DetectaV5" -o "$ARRIDIR/$2" -d "$RECHDIR" &

	#Grabo en log
	LoguearV5.sh -c "DetectaV5" -m "Archivo rechazado: $1" -t I &
	wait $!
}


#***********************************************************************
#				DetectaV5
#***********************************************************************


Nombre='DetectaV5.sh'
if ps -A | grep -v $$ | grep $Nombre  > /dev/null
then
	LoguearV5.sh -c "DetectaV5" -m "Ya hay otra instancia de DetectaV5 corriendo" -t I &
	echo 'Ya hay otra instancia de DetectaV5 corriendo'
	exit 0 
fi

if [ -z "$ARRIDIR" ]
then
	echo 'El ambiente no fue inicializado'
	LoguearV5.sh -c "DetectaV5" -m "5" -t SE &
	exit 0 
fi

while true
do 
	aux=`ls -A "$ARRIDIR"`
	if [ "$aux" ]
	then
		#Arridir no esta vacio
		for file in `ls "$ARRIDIR" | sed 's/^.*\/\([^\/]*\)$/\1/'`
		do	
			
			if [ $(stat -c %s "ARRIDIR/$file") -eq 0 ]; then
				MSG="Archivo vacio"
				rechazarArchivo "$MSG" "$file"
				continue
			fi;

			#Chequeo las condiciones pedidas para el nombre de los archivos
			tipo=`file -ib "$ARRIDIR/$file" | grep 'text/plain'`
			if [ -z "$tipo" ]
			then
				MSG="Tipo de archivo invalido"
				rechazarArchivo "$MSG" "$file"
				continue
			fi

			NombreArchivo=`echo "$file" | grep '.*_[0-9]\{4\}-[01][0-9]-[0-3][0-9]'`
			if [ -z "$NombreArchivo" ]
			then
				MSG="Nombre del archivo con formato invalido"
				rechazarArchivo "$MSG" "$file"
				continue
			fi

			SisId=`echo "$file" | sed 's/^\(.*\)_[^_]*$/\1/'`
			if [ ! `cut "$MAEDIR/sistemas" -f1 -d,  | grep $SisId` ]
			then
				MSG="Sistema inexistente"
				rechazarArchivo "$MSG" "$file"
				continue
			fi
			Hoy=$(date '+%s')
			strfecha=`echo "$file" | sed 's/^.*_\([0-9]\{4\}-[01][0-9]-[0-3][0-9]\).*$/\1/'`;
			Fecha=""
			if [ ! -z "$strfecha" ];then
				Fecha=$(date --date "$strfecha" '+%s')	
			fi;

			if [ -z "$Fecha" ]
			then
				MSG="Fecha invalida"
				rechazarArchivo "$MSG" "$file"
				continue
			fi

			if [ "$Fecha" -gt "$Hoy" ]
			then
				MSG="Fecha posterior a la fecha actual"
				rechazarArchivo "$MSG" "$file"
				continue
			fi
			
			FECHA_ALTA=`cat "$MAEDIR/sistemas" | grep "^$SisId," | cut -f3 -d, `
			FECHA_BAJA=`cat "$MAEDIR/sistemas" | grep "^$SisId," | cut -f4 -d, `
			if [ ! -z "$FECHA_BAJA" ] 
			then 
				if [ $Fecha -gt `date --date "$FECHA_BAJA" +%s` ]
				then
					MSG="Fecha posterior a la fecha de baja"
					rechazarArchivo "$MSG" "$file"
					continue
				fi
			fi

			if [ $Fecha -lt `date --date "$FECHA_ALTA" +%s` ]
			then
				MSG="Fecha anterior a la fecha de alta"
				rechazarArchivo "$MSG" "$file"
				continue
			fi

			MoverV5.sh -c "DetectaV5" -o "$ARRIDIR/$file" -d "$ACEPDIR" &
			wait $!

			LoguearV5.sh -c "DetectaV5" -m "Archivo aceptado movido con exito" -t I &
			wait $!
		done
	fi
	
	#Chequeo si hay archivos aceptados en ACEPDIR
		aux2=`ls -A "$ACEPDIR"`
	if [ "$aux2" ]
	then
		Nom='BuscarV5'
		if ! ps -A | grep $Nom  > /dev/null
		then
			#No hay una instancia de BuscarV5 corriendo, ejecuto BuscarV5
			BuscarV5.sh &
			PID=`ps -A | grep -v grep | grep 'BuscarV5' | cut -f1 -d\ `
			if [ -z "$PID" ]
			then
				LoguearV5.sh -c "DetectaV5" -m "3" -t SE &
				echo ""
			else
				LoguearV5.sh -c "DetectaV5" -m "BuscarV5 ejecutandose. ProcessId: $PID" -t I &
				let SECUENCIA2=$SECUENCIA2+1
				#actualizo el archivo de conf
				sed -i -e"s/^SECUENCIA2=[^=]*\(=.*$\)/SECUENCIA2=$SECUENCIA2\1/g" "$CONFDIR/InstalaV5.conf"
			fi
		fi
	fi

	sleep 5s
done


